#include "secondary_functions.h"
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
#include <sstream>
#include "metod.h"
using namespace std;

void rand_pos(int A[3][3]){
    //cout << "cycle" << endl;
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            if (A[i][j] == 0) { A[i][j] = 2; i = 5; j = 5; }
        }
    }
}

void print(int board[3][3], int hod){
    for(int j = 0; j < 3; j++){
        for(int i = 0; i < 3; i++){
            cout << board[j][i] << " ";
        }
        cout << endl;
    }
    cout << "hod = " << hod << endl;
    cout << endl;
}

int vin(int A[3][3]){ //функция проверяет на предмет побелы компьютером
    if (A[0][0] == 2 && A[0][1] == 2 && A[0][2] == 2) { return 1; }
    if (A[1][0] == 2 && A[1][1] == 2 && A[1][2] == 2) { return 1; }
    if (A[2][0] == 2 && A[2][1] == 2 && A[2][2] == 2) { return 1; }

    if (A[0][0] == 2 && A[1][0] == 2 && A[2][0] == 2) { return 1; }
    if (A[0][1] == 2 && A[1][1] == 2 && A[2][1] == 2) { return 1; }
    if (A[0][2] == 2 && A[1][2] == 2 && A[2][2] == 2) { return 1; }

    if (A[0][0] == 2 && A[1][1] == 2 && A[2][2] == 2) { return 1; }
    if (A[0][2] == 2 && A[1][1] == 2 && A[2][0] == 2) { return 1; }

    return 0;
}

int vin_igrok(int A[3][3]){ //функция проверяет на предмет побелы компьютером
    if (A[0][0] == 1 && A[0][1] == 1 && A[0][2] == 1) { return 2; }
    if (A[1][0] == 1 && A[1][1] == 1 && A[1][2] == 1) { return 2; }
    if (A[2][0] == 1 && A[2][1] == 1 && A[2][2] == 1) { return 2; }

    if (A[0][0] == 1 && A[1][0] == 1 && A[2][0] == 1) { return 2; }
    if (A[0][1] == 1 && A[1][1] == 1 && A[2][1] == 1) { return 2; }
    if (A[0][2] == 1 && A[1][2] == 1 && A[2][2] == 1) { return 2; }

    if (A[0][0] == 1 && A[1][1] == 1 && A[2][2] == 1) { return 2; }
    if (A[0][2] == 1 && A[1][1] == 1 && A[2][0] == 1) { return 2; }

    return 0;
}

int check_vin(int A[3][3], int &hod) { //функция помогает алгоритму искать выигрышные варианты
    if (A[1][1] == 2){ //центр у проги
        //диагонали
        if (A[0][0] == 2 && A[2][2] == 0){ A[2][2] = 2; hod++; return 1;}
        if (A[2][2] == 2 && A[0][0] == 0){ A[0][0] = 2; hod++; return 1;}
        if (A[0][2] == 2 && A[2][0] == 0){ A[2][0] = 2; hod++; return 1;}
        if (A[2][0] == 2 && A[0][2] == 0){ A[0][2] = 2; hod++; return 1;}

        //горизонтальная и вертикальная центр
        if (A[0][1] == 2 && A[2][1] == 0){ A[2][1] = 2; hod++; return 1;}
        if (A[2][1] == 2 && A[0][1] == 0){ A[0][1] = 2; hod++; return 1;}
        if (A[1][0] == 2 && A[1][2] == 0){ A[1][2] = 2; hod++; return 1;}
        if (A[2][2] == 2 && A[1][0] == 0){ A[1][0] = 2; hod++; return 1;}
    }
    //периметр
    if ((A[0][0] + A[1][0] + A[2][0]) == 4 && A[0][0] != 1 && A[1][0] != 1 && A[2][0] != 1){  //левая грань
        if (A[0][0] == 0){ A[0][0] = 2; hod++; return 1; }
        if (A[1][0] == 0){ A[1][0] = 2; hod++; return 1; }
        if (A[2][0] == 0){ A[2][0] = 2; hod++; return 1; }
    }
    if ((A[2][0] + A[2][1] + A[2][2]) == 4 && A[2][0] != 1 && A[2][1] != 1 && A[2][2] != 1){ //нижняя грань
        if (A[2][0] == 0){ A[2][0] = 2; hod++; return 1; }
        if (A[2][1] == 0){ A[2][1] = 2; hod++; return 1; }
        if (A[2][2] == 0){ A[2][2] = 2; hod++; return 1; }
    }
    if ((A[0][2] + A[1][2] + A[2][2]) == 4 && A[0][2] != 1 && A[1][2] != 1 && A[2][2] != 1){ //правая грань
        if (A[0][2] == 0){ A[0][2] = 2; hod++; return 1; }
        if (A[1][2] == 0){ A[1][2] = 2; hod++; return 1; }
        if (A[2][2] == 0){ A[2][2] = 2; hod++; return 1; }
    }
    if ((A[0][0] + A[0][1] + A[0][2]) == 4 && A[0][0] != 1 && A[0][1] != 1 && A[0][2] != 1){ //верхняя грань
        if (A[0][0] == 0){ A[0][0] = 2; hod++; return 1; }
        if (A[0][1] == 0){ A[0][1] = 2; hod++; return 1; }
        if (A[0][2] == 0){ A[0][2] = 2; hod++; return 1; }
    }
    return 0;
}